package com.czy;

import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import java.io.File;
import java.io.IOException;

public class JAVA操作PDF {
    public static void main(String[] args) throws IOException {
        String srcPDF = "d:/案号.pdf"; // 模板PDF文件路径
        String imgPath = "d:/name.png"; // 要插入的图片文件路径
        String destPDF = "d:/output.pdf"; // 输出PDF文件路径
        try (PDDocument document = Loader.loadPDF(new File(srcPDF));) {
            PDPage page1 = document.getPage(0); // 获取第1页
            PDPage page2 = document.getPage(1); // 获取第2页

            try (PDPageContentStream contentStream = new PDPageContentStream(document, page1, PDPageContentStream.AppendMode.APPEND, true)) {
                // 加载字体，这里使用的是PDFBox自带的标准字体
                PDType0Font load = PDType0Font.load(document, new File("d:/微软雅黑.ttf"));
                // 设置字体大小
                float fontSize = 12;
                contentStream.beginText();
                contentStream.setFont(load,fontSize);
                // 设置文字颜色（可选）
                contentStream.setNonStrokingColor(0, 0, 0); // 黑色
                // 设置文字位置
                contentStream.newLineAtOffset(100, 700);
                // 添加文字
                contentStream.showText("张三");
                // 结束文字添加
                contentStream.endText();

                contentStream.beginText();
                contentStream.setFont(load,fontSize);
                // 设置文字颜色（可选）
                contentStream.setNonStrokingColor(0, 0, 0); // 黑色
                // 设置文字位置
                contentStream.newLineAtOffset(100, 600);
                // 添加文字
                contentStream.showText("张三2");
                // 结束文字添加
                contentStream.endText();
            }
            // 创建内容流
            try (PDPageContentStream contentStream = new PDPageContentStream(document, page2, PDPageContentStream.AppendMode.APPEND, true)) {
                // 加载图片
                PDImageXObject pdImage = PDImageXObject.createFromFile(imgPath, document);

                // 设置图片位置和尺寸
                float x = 100; // x坐标
                float y = 600; // y坐标
                float width = 50; // 宽度
                float height = 30; // 高度
                // 绘制图片
                contentStream.drawImage(pdImage, x, y, width, height);
                y = 300; // y坐标
                contentStream.drawImage(pdImage, x, y, width, height);

                // 加载字体，这里使用的是PDFBox自带的标准字体
                PDType0Font load = PDType0Font.load(document, new File("d:/微软雅黑.ttf"));
                // 设置字体大小
                float fontSize = 12;
                contentStream.beginText();
                contentStream.setFont(load,fontSize);
                // 设置文字颜色（可选）
                contentStream.setNonStrokingColor(0, 0, 0); // 黑色
                // 设置文字位置
                contentStream.newLineAtOffset(100, 500);
                // 添加文字
                contentStream.showText("张三");
                // 结束文字添加
                contentStream.endText();
            }
            // 保存文档
            document.save(new File(destPDF));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}